Поверхность B-сплайна получается из двунаправленной сети контрольных точек, двух узловых векторов, и результатов одномерных функций B-сплайна
`S(u,v)=sum_{i=0}^nsum_{j=0}^mN_{i,p}(u)N_{j,q}(v)P_{i,j}` (3.11)
`U="{"ubrace(0,…,0)_(p+1),u_{p+1},…,u_{r-p-1},ubrace(1,…,1)_(p+1)"}"`
`V="{"ubrace(0,…,0)_(q+1),v_{q+1},…,v_{s-q-1},ubrace(1,…,1)_(q+1)"}"`
`U` имеет `r+1` узлов, и `V` имеет `s+1`. Уравнение (3.2) принимает вид
`r=n+p+1` и `s=m+q+1`(3.12)
Пусть `U` и `{N_{i,3}(u)}` будут узловым вектором и кубической базисной функцией рис 3.2а, и `{N_{j,2}(v)}` квадратичной базисной функцией определенными `V={0,0,0,`1⁄5,2⁄5,3⁄5,3⁄5,4⁄5,`1,1,1}`. Рисунки 3.19а и 3.19бпоказывают тензорное произведение базисных функций `N_{4,3}(u)N_{4,2}(v)` и `N_{4,3}(u)N_{2,2}(v)` соответственно. Рисунки 3.20-3.25 показывают примеры поверхностей B-сплайнов.Рисунок 3.19. Кубические `xx` квадратичные базисные функции, (а) `N_{4,3}(u)N_{4,2}(v)`; (б) `N_{4,3}(u)N_{2,2}(v)`; `U={0,0,0,0,`1⁄4,1⁄2,3⁄4,`1,1,1,1}` и `U={0,0,0,`1⁄5,2⁄5,3⁄5,4⁄5,`1,1,1}`.
Пять шагов, которые необходимы для вычисления точки на поверхности B-сплайна при фиксированных значения параметров `(u,v)`:
Последний шаг принимает форму
`S(u,v)=[N_{k,p}(u)]^T[P_{k,l}][N_{l,q}(v)]` `i-p≤k≤i,j-q≤l≤j`(3.12)
Следует отметить, что `[N_{k,p}(u)]^T` это `1xx(p+1)` вектор-строка скаляров, `[P_{k,l}]` является `(p+1)xx(q+1)` матрицей контрольных точек, и `[N_{l,q}(v)]` является `(q+1)xx1` вектор-столбец скаляров.Примеры
Пример3.4 | Пусть `p=q=2` и `sum_{i=0}^4sum_{j=0}^5N_{i,2}(u)N_{j,2}(v)P_{i,j}` с
`U="{"0,0,0,`2⁄5,3⁄5,`1,1,1"}"` `V="{"0,0,0,`1⁄5,1⁄2,4⁄5,`1,1,1"}"` Вычислим `S(1/5,3/5)`. Тогда `1/5 in [u_2,u_3)` и `3/5 in [v_4,v_5)` и`S(1/5,3/5)=[N_{0,2}(1/5)N_{1,2}(1/5)N_{2,2}(1/5)]xx[[P_{0,2},P_{0,3},P_{0,4}], [P_{1,2},P_{1,3},P_{1,4}],[P_{2,2},P_{2,3},P_{2,4}]]xx[[N_{2,2}(3/5)],[N_{3,2}(3/5)],[N_{4,2}(3/5)]]` |
Алгоритм A3.5 вычисляет точку на поверхности B-сплайна по фиксированным значениям `(u,v)`. Для повышения эффективности, он использует локальный массив, temp[], чтобы сохранить вектор/матрицу произведения `[N_{k,p}(u)]^T[P_{k,l}]`. Полученный вектор точек (при temp[]) затем умножается с вектором `[N_{l,q}(v)]`.
SurfacePoint(n,p,U,m,q,V,P,u,v,S) { /* Вычислить точку поверхности */ /* Вход: n,p,U,m,q,V,P,u,v */ /* Выход: S */ uspan = FindSpan(n,p,u,U); BasisFuns(uspan,u,p,U,Nu); vspan = FindSpan(m,q,v,V); BasisFuns(vspan,v,q,V,Nv); uind = uspan – p; S = 0.0; for (l=0; l<=q; l++) { temp = 0.0; vind = vspan – q – l; for (k=0; k<=p; k++) temp = temp + Nu[k]*P[uind+k][vind]; S = S + Nv[l]*temp; } }
Свойства тензорного произведения базисных функций следуют из соответствующих свойств одномерных базисных функций, перечисленных в главе 2.
Св.3.12 | Не отрицательность: `N_{i,p}(u)N_{j,q}(v)≥0` для всех `i,j,p,q,u,v`; |
Св.3.13 | Разбиение единицы: `∑_{i=0}^n∑_{j=0}^mN_{i,p}(u)N_{j,q}(v)=1` для всех `(u,v)∈[0,1]×[0,1]`; |
Св.3.14 | Если `n=p`, `m=q`, `U={0,…,0,1,…,1}`, и `V={0,…,0,1,…,1}`, тогда `N_{i,p}(u)N_{j,q}(v)=B_{i,n}(u)B_{j,m}(v)` для всех `i`, `j`; то есть, результат функций B-сплайна вырождаются в произведения полиномов Бернштейна; |
Св.3.15 | `N_{i,p}(u)N_{j,q}(v)=0` если `(u,v)` находится за пределами прямоугольника `[u_i,u_{i+p+1})×[v_j,v_{j+q+1})` (см рисунки 3.19а и 3.19б); |
Св.3.16 | В любом данном прямоугольнике, `[u_{i_0},u_{i_0+1})×[v_{j_0},v_{j_0+1})`, в крайнем случае `(p+1)(q+1)` базисные функции не равны нулю, в частности, `N_{i,p}(u)N_{j,q}(v)` для `i_0-p≤i≤i_0`,`j_0-q≤j≤j_0`; |
Св.3.17 | Если `p>0` и `q>0`, тогда `N_{i,p}(u)N_{j,q}(v)` достигает ровно одно максимальное значение ( смотри рисунки 3.19а и 3.19б); |
Св.3.18 | Границы прямоугольников, образованны u и v узловыми линиями, где функция является двумерный полином, все частные производные `N_{i,p}(u)N_{j,q}(v)` существуют; в `u` узел (`v` узел) она в `p-k` (`q-k`) раз дифференцируемые в направлении `u`(`v`), где `k` является кратность узла. На рисунке 3.19а первая частичная производная `N_{4,3}(u)N_{4,2}(v)` по отношению к `v` является непрерывным по узловой линии `v=`3⁄5, где `N_{4,2}(v)` имеет выступ. Вторая частная производная по отношению к u непрерывна всюду, потому что `N_{4,3}(u)` является `C^2` непрерывной. |
Поверхности B-сплайнов имеют следующие свойства:
Св.3.19 | Если `n=p`, `m=q`, `U={0,…,0,1,…,1}`, и `V={0,…,0,1,…,1}`, тогда `S(u,v)` это поверхность Безье; это следует из Св.3.14; |
Св.3.20 | Поверхность интерполируется по четырём угловыми контрольным точкам: `S(0,0)=P_{0,0}`, `S(1,0)=P_{n,0}`,
`S(0,1)=P_{0,m}` и `S(1,1)=P_{n,0}` (рисунки с 3.20 до
3.25); это следует из Св.3.13 и идентичности
`N_{0,p}(0)N_{0,q}(0)=N_{n,p}(1)N_{0,q}(0)=N_{0,p}(0)N_{m,q}(1)=N_{n,p}(1)N_{m,q}(1)=1` |
Св.3.21 | Аффинная инвариантность: аффинное преобразование применяемое к поверхности, применяется к её контрольным точкам; это следует из Св.3.13; |
Св.3.22 | Свойство сильной выпуклой оболочки: если `(u,v)∈[u_{i_0},u_{i_0+1})×[v_{j_0},v_{j_0+1})`, тогда `S(u,v)` находится в выпуклой оболочке опорных точек `P_(i,j)`, `i_0-p≤i≤i_0` и `j_0-q≤j≤j_0` (смотри рисунок 3.21); это следует из Св.3.12, Св.3.13 и Св.3.16; |
Св.3.23 | Если триангулируем, контрольные сетевые формы представляют кусочно плоской приближение к поверхности; как и в случае кривых, чем ниже степень, тем лучше приближение (смотри рисунки 3.22а и 3.22б); |
Св.3.24 | Схема местных модификаций: если `P_{i,j}` перенесена, она действует на поверхность только в прямоугольнике `[u_i,u_{i+p+1})×[v_j,v_{j+q+1})`; это следует из Св.3.15. Теперь рассмотрим рисунки 3.23а и 3.23б: исходная поверхность плоская, потому что все контрольные точки лежат в одной плоскости (Св.3.22); Контрольная сеть смещена от поверхности для лучшей визуализации. Когда `P_{3,5}` перемещается она влияет на форму поверхности только в прямоугольнике `[1⁄4,1)×[2⁄5,1)`; |
Св.3.25 | Непрерывность и дифференцируемость `S(u,v)` следует из базисных функций. В частности, `S(u,v)` в `p-k` (`q-k`) раз дифференцируемой в `u(v)` направление на `u(v)` узел кратности `k`. Рисунок 3.24 показывает квадратичную×кубическую поверхность, определяемую на узел векторов `U={0,0,0,`1⁄2,1⁄2,`1,1,1}` и `V={0,0,0,`1⁄2,`1,1,1,1}`. Обратите внимание на складки на поверхности, соответствующий узел линии `u=`1⁄2; Конечно, как и в случае кривых, можно расположить контрольные точки таким образом, что они взаимно аннигилируют разрывы в базисных функций. С помощью многократно совпадающих контрольных точек, визуальные разрывы могут быть созданы там, где нет соответствующих разрывов в базисных функциях; Рисунок 3.25 показывает такую поверхность, которая бикубическая без каких-либо нескольких узлов. Таким образом, вторая частная производная всюду непрерывна. Складка образуется из-за нескольких контрольных точек. |
Рисунок 3.20. Поверхность B-сплайна, (a) контрольная сеть; (b) поверхность.
Рисунок 3.21. (a) кубическая`xx`квадратичная поверхность B-сплайна; (b) свойство сильной выпуклой оболочки.
Рисунок 3.22. а) биквадратичная поверхность; (б) биквартик поверхность `(p=q=4)`, использующая те же контрольные точки, что и на рисунке 3.22a.
Рисунок 3.23. (а) Плоская квадратичная`xx`кубическая поверхность, `U={0,0,0,`1⁄4,1⁄2,3⁄4,`1,1,1}` и `V=(0,0,0,0,`1⁄5,2⁄5,3⁄5,4⁄5,`1,1,1,1}`; (b) `P_{3,5}` перемещается, влияя на форму поверхности только в прямоугольнике `[1⁄4,1)xx[2⁄5,1)`.
Рисунок 3.24. Квадратичная`xx`кубическая поверхность со складкой, `U={0,0,0,`1⁄2,1⁄2,`1,1,1}` и `V={0,0,0,0,`1⁄2,`1,1,1,1}`.
Рисунок 3.25. Бикубическая поверхность со складкой, `U={0,0,0,0,`1⁄4,1⁄2,3⁄4,`1,1,1,1}` и `V={0,0,0,0,`1⁄2,`1,1,1,1}`; `P_{2,j}=P_{3,j}=P_{4,j}` для `0≤j≤4`.
Заметим здесь, что нет никакого известного свойства уменьшения изменения для B-сплайн поверхностей (смотри [Prau92]).
Изо-параметрические кривые на `S(u,v)` получают по способу, аналогичному тому, что для Безье поверхностей. Зафиксируем `u=u_0`
`C_{u_0}(v)=S(u_0,v)=sum_{i=0}^nsum_{j=0}^mN_{i,p}(u_0)N_{j,q}(v)P_{i,j}` `=sum_{j=0}^mN_{j,q}(v)(sum_{i=0}^nN_{i,p}(u_0)P_{i,j})=sum_{j=0}^mN_{j,q}(v)Q_j(u_0)`(3.14)
где `Q_j(u_0)=sum_{i=0}^nN_{i,p}(u_0)P_{i,j}`
Аналогично `C_(v_0)(u)=sum_{i=0}^nN_{i,p}(u)Q_i(v_0)`
где `Q_i(v_0)=sum_{j=0}^mN_{j,q}(v_0)P_{i,j}`(3.15)
это изо кривая на `S(u,v)`. `C_(u_0)(v)` является `q`-ой степенью кривой B-сплайна на `V` и `C_{v_0}(u)` является `p`-ой степенью кривой B-сплайна на `U`. Точка `S(u_0,v_0)` это пересечение `C_{u_0}(v)` и `C_{v_0}(u)`. Все линии, показанные на поверхностях в рисунках 3.20-3.25 являются изолиниями.